package com.zfl.remove;

import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

public class UserPool {
    private final Map<String,UserNode> users = new ConcurrentHashMap<>();

    // 添加用户（登录）
    public void addUser(UserNode user) {
        if (user != null && user.getUserId() != null) {
            users.put(user.getUserId(), user);
            System.out.println("用户登录: " + user + "，当前在线人数: " + users.size());
        }
    }

    // 移除用户（登出）
    public void removeUser(String userId) {
        UserNode removedUser = users.remove(userId);
        if (removedUser != null) {
            System.out.println("用户登出: " + removedUser + "，当前在线人数: " + users.size());
        }
    }

    // 清理超时用户
    public int cleanTimeoutUsers(long timeoutMillis) {
        int count = 0;
        // 使用ConcurrentHashMap的迭代器安全遍历并移除元素
        for (Map.Entry<String, UserNode> entry : users.entrySet()) {
            UserNode user = entry.getValue();
            if (user.isTimeOut(timeoutMillis)) {
                users.remove(entry.getKey());
                System.out.println("清理超时用户: " + user);
                count++;
            }
        }
        System.out.println("本次清理完成，共清理 " + count + " 个超时用户，剩余在线人数: " + users.size());
        return count;
    }

    // 获取在线用户数量
    public int getOnlineUserCount() {
        return users.size();
    }

    // 获取所有在线用户ID
    public Set<String> getOnlineUserIds() {
        return users.keySet();
    }
}
